package com.dayuanit.dy15.lesson27.demo1;

public class Test {

    public static void main(String[] args) {
        //内部类
//        Animal animl = new Animal();
//        Animal.Dog dog = animl.new Dog();//先创建外部类对象，再创建内部类对象
//        Animal.Dog dog2 = new Animal().new Dog();
//        Dog dog2 = null;内部类必须要有外部类的引用才能找到

//        dog.run();
//        dog2.run();

        Animal.Fish fish = new Animal.Fish();//创建静态内部类的实例对象
        fish.run();



        AlibabaPay alibabaPay = new AlibabaPay();
        alibabaPay.alipay();

        //匿名内部类
        Pay pay = new Pay() {
            @Override
            public void alipay() {
                System.out.println("匿名内部类的alipay()");
            }
        };
        pay.alipay();

        System.out.println("-----------------");

        Hotal hotal = new Hotal();
        //第一种 新建一个类，实现pay接口
        hotal.toPay(alibabaPay);
        //第二种 通过匿名内部类，实现pay接口
        hotal.toPay(new Pay() {
            @Override
            public void alipay() {
                System.out.println("匿名 alipay()");
            }
        });

        //第三种 通过jdk8提供的新特性lambda表达式，来简化匿名内部类的写法。
        hotal.toPay(() -> System.out.println("Lambda alipay()"));
    }
}
